home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / AppleTalk.p < prev    next >
Encoding:
Text File  |  1998-02-12  |  30.3 KB  |  827 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        AppleTalk.p
  3.  
  4.      Contains:    AppleTalk Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.1
  8.  
  9.      Copyright:    © 1985-1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT AppleTalk;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __APPLETALK__}
  28. {$SETC __APPLETALK__ := 1}
  29.  
  30. {$I+}
  31. {$SETC AppleTalkIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __MACTYPES__}
  35. {$I MacTypes.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __OSUTILS__}
  38. {$I OSUtils.p}
  39. {$ENDC}
  40.  
  41.  
  42. {$PUSH}
  43. {$ALIGN MAC68K}
  44. {$LibExport+}
  45.  
  46.  
  47. CONST
  48.                                                                 {  Driver unit numbers (ADSP is dynamic)  }
  49.     mppUnitNum                    = 9;                            {  MPP unit number  }
  50.     atpUnitNum                    = 10;                            {  ATP unit number  }
  51.     xppUnitNum                    = 40;                            {  XPP unit number  }
  52.  
  53.                                                                 {  Driver refNums (ADSP is dynamic)  }
  54.     mppRefNum                    = -10;                            {  MPP reference number  }
  55.     atpRefNum                    = -11;                            {  ATP reference number  }
  56.     xppRefNum                    = -41;                            {  XPP reference number  }
  57.  
  58.                                                                 {  .MPP csCodes  }
  59.     lookupReply                    = 242;                            {  This command queued to ourself  }
  60.     writeLAP                    = 243;                            {  Write out LAP packet  }
  61.     detachPH                    = 244;                            {  Detach LAP protocol handler  }
  62.     attachPH                    = 245;                            {  Attach LAP protocol handler  }
  63.     writeDDP                    = 246;                            {  Write out DDP packet  }
  64.     closeSkt                    = 247;                            {  Close DDP socket  }
  65.     openSkt                        = 248;                            {  Open DDP socket  }
  66.     loadNBP                        = 249;                            {  Load NBP command-executing code  }
  67.     lastResident                = 249;                            {  Last resident command  }
  68.     confirmName                    = 250;                            {  Confirm name  }
  69.     lookupName                    = 251;                            {  Look up name on internet  }
  70.     removeName                    = 252;                            {  Remove name from Names Table  }
  71.     registerName                = 253;                            {  Register name in Names Table  }
  72.     killNBP                        = 254;                            {  Kill outstanding NBP request  }
  73.     unloadNBP                    = 255;                            {  Unload NBP command code  }
  74.     setSelfSend                    = 256;                            {  MPP: Set to allow writes to self  }
  75.     SetMyZone                    = 257;                            {  Set my zone name  }
  76.     GetATalkInfo                = 258;                            {  get AppleTalk information  }
  77.     ATalkClosePrep                = 259;                            {  AppleTalk close query  }
  78.  
  79.                                                                 {  .ATP csCodes  }
  80.     nSendRequest                = 248;                            {  NSendRequest code  }
  81.     relRspCB                    = 249;                            {  Release RspCB  }
  82.     closeATPSkt                    = 250;                            {  Close ATP socket  }
  83.     addResponse                    = 251;                            {  Add response code | Require open skt  }
  84.     sendResponse                = 252;                            {  Send response code  }
  85.     getRequest                    = 253;                            {  Get request code  }
  86.     openATPSkt                    = 254;                            {  Open ATP socket  }
  87.     sendRequest                    = 255;                            {  Send request code  }
  88.     relTCB                        = 256;                            {  Release TCB  }
  89.     killGetReq                    = 257;                            {  Kill GetRequest  }
  90.     killSendReq                    = 258;                            {  Kill SendRequest  }
  91.     killAllGetReq                = 259;                            {  Kill all getRequests for a skt  }
  92.  
  93.                                                                 {  .XPP csCodes  }
  94.     openSess                    = 255;                            {  Open session  }
  95.     closeSess                    = 254;                            {  Close session  }
  96.     userCommand                    = 253;                            {  User command  }
  97.     userWrite                    = 252;                            {  User write  }
  98.     getStatus                    = 251;                            {  Get status  }
  99.     afpCall                        = 250;                            {  AFP command (buffer has command code)  }
  100.     getParms                    = 249;                            {  Get parameters  }
  101.     abortOS                        = 248;                            {  Abort open session request  }
  102.     closeAll                    = 247;                            {  Close all open sessions  }
  103.     xCall                        = 246;                            {  .XPP extended calls  }
  104.  
  105.                                                                 {  Transition Queue transition types  }
  106.     ATTransOpen                    = 0;                            { AppleTalk has opened }
  107.     ATTransClose                = 2;                            { AppleTalk is about to close }
  108.     ATTransClosePrep            = 3;                            { Is it OK to close AppleTalk ? }
  109.     ATTransCancelClose            = 4;                            { Cancel the ClosePrep transition }
  110.  
  111.     afpByteRangeLock            = 1;                            { AFPCall command codes }
  112.     afpVolClose                    = 2;                            { AFPCall command codes }
  113.     afpDirClose                    = 3;                            { AFPCall command codes }
  114.     afpForkClose                = 4;                            { AFPCall command codes }
  115.     afpCopyFile                    = 5;                            { AFPCall command codes }
  116.     afpDirCreate                = 6;                            { AFPCall command codes }
  117.     afpFileCreate                = 7;                            { AFPCall command codes }
  118.     afpDelete                    = 8;                            { AFPCall command codes }
  119.     afpEnumerate                = 9;                            { AFPCall command codes }
  120.     afpFlush                    = 10;                            { AFPCall command codes }
  121.     afpForkFlush                = 11;                            { AFPCall command codes }
  122.     afpGetDirParms                = 12;                            { AFPCall command codes }
  123.     afpGetFileParms                = 13;                            { AFPCall command codes }
  124.     afpGetForkParms                = 14;                            { AFPCall command codes }
  125.     afpGetSInfo                    = 15;                            { AFPCall command codes }
  126.     afpGetSParms                = 16;                            { AFPCall command codes }
  127.     afpGetVolParms                = 17;                            { AFPCall command codes }
  128.     afpLogin                    = 18;                            { AFPCall command codes }
  129.     afpContLogin                = 19;                            { AFPCall command codes }
  130.     afpLogout                    = 20;                            { AFPCall command codes }
  131.     afpMapID                    = 21;                            { AFPCall command codes }
  132.     afpMapName                    = 22;                            { AFPCall command codes }
  133.     afpMove                        = 23;                            { AFPCall command codes }
  134.     afpOpenVol                    = 24;                            { AFPCall command codes }
  135.     afpOpenDir                    = 25;                            { AFPCall command codes }
  136.     afpOpenFork                    = 26;                            { AFPCall command codes }
  137.     afpRead                        = 27;                            { AFPCall command codes }
  138.     afpRename                    = 28;                            { AFPCall command codes }
  139.     afpSetDirParms                = 29;                            { AFPCall command codes }
  140.     afpSetFileParms                = 30;                            { AFPCall command codes }
  141.     afpSetForkParms                = 31;                            { AFPCall command codes }
  142.     afpSetVolParms                = 32;                            { AFPCall command codes }
  143.     afpWrite                    = 33;                            { AFPCall command codes }
  144.     afpGetFlDrParms                = 34;                            { AFPCall command codes }
  145.     afpSetFlDrParms                = 35;                            { AFPCall command codes }
  146.     afpDTOpen                    = 48;                            { AFPCall command codes }
  147.     afpDTClose                    = 49;                            { AFPCall command codes }
  148.     afpGetIcon                    = 51;                            { AFPCall command codes }
  149.     afpGtIcnInfo                = 52;                            { AFPCall command codes }
  150.     afpAddAPPL                    = 53;                            { AFPCall command codes }
  151.     afpRmvAPPL                    = 54;                            { AFPCall command codes }
  152.     afpGetAPPL                    = 55;                            { AFPCall command codes }
  153.     afpAddCmt                    = 56;                            { AFPCall command codes }
  154.     afpRmvCmt                    = 57;                            { AFPCall command codes }
  155.     afpGetCmt                    = 58;                            { AFPCall command codes }
  156.     afpAddIcon                    = 192;                            { Special code for ASP Write commands }
  157.  
  158.     xppLoadedBit                = 5;                            {  XPP bit in PortBUse  }
  159.     scbMemSize                    = 192;                            {  Size of memory for SCB  }
  160.     xppFlagClr                    = 0;                            {  Cs for AFPCommandBlock  }
  161.  
  162.     xppFlagSet                    = 128;                            {  StartEndFlag & NewLineFlag fields.  }
  163.  
  164.     lapSize                        = 20;
  165.     ddpSize                        = 26;
  166.     nbpSize                        = 26;
  167.     atpSize                        = 56;
  168.  
  169.     atpXOvalue                    = 32;                            { ATP exactly-once bit  }
  170.     atpEOMvalue                    = 16;                            { ATP End-Of-Message bit  }
  171.     atpSTSvalue                    = 8;                            { ATP Send-Transmission-Status bit  }
  172.     atpTIDValidvalue            = 2;                            { ATP trans. ID valid bit  }
  173.     atpSendChkvalue                = 1;                            { ATP send checksum bit  }
  174.  
  175.     zipGetLocalZones            = 5;
  176.     zipGetZoneList                = 6;
  177.     zipGetMyZone                = 7;
  178.  
  179.     LAPMgrPtr                    = $0B18;                        { Entry point for LAP Manager }
  180.  
  181.     LAPMgrCall                    = 2;                            { Offset to LAP routines }
  182.     LAddAEQ                        = 23;                            { LAPAddATQ routine selector }
  183.     LRmvAEQ                        = 24;                            { LAPRmvATQ routine selector }
  184.  
  185.     tLAPRead                    = 0;
  186.     tLAPWrite                    = 1;
  187.     tDDPRead                    = 2;
  188.     tDDPWrite                    = 3;
  189.     tNBPLookup                    = 4;
  190.     tNBPConfirm                    = 5;
  191.     tNBPRegister                = 6;
  192.     tATPSndRequest                = 7;
  193.     tATPGetRequest                = 8;
  194.     tATPSdRsp                    = 9;
  195.     tATPAddRsp                    = 10;
  196.     tATPRequest                    = 11;
  197.     tATPResponse                = 12;
  198.  
  199.  
  200. TYPE
  201.     ABCallType                            = SInt8;
  202.  
  203. CONST
  204.     lapProto                    = 0;
  205.     ddpProto                    = 1;
  206.     nbpProto                    = 2;
  207.     atpProto                    = 3;
  208.  
  209.  
  210. TYPE
  211.     ABProtoType                            = UInt8;
  212.     ABByte                                = Byte;
  213.     LAPAdrBlockPtr = ^LAPAdrBlock;
  214.     LAPAdrBlock = PACKED RECORD
  215.         dstNodeID:                UInt8;
  216.         srcNodeID:                UInt8;
  217.         lapProtType:            ABByte;
  218.         filler:                    UInt8;                                    {     Filler for proper byte alignment }
  219.     END;
  220.  
  221.     ATQEntryPtr = ^ATQEntry;
  222. {$IFC TYPED_FUNCTION_POINTERS}
  223.     ATalkTransitionEventProcPtr = FUNCTION(eventCode: LONGINT; qElem: ATQEntryPtr; eventParameter: UNIV Ptr): LONGINT; C;
  224. {$ELSEC}
  225.     ATalkTransitionEventProcPtr = ProcPtr;
  226. {$ENDC}
  227.  
  228.     ATalkTransitionEventUPP = UniversalProcPtr;
  229.     ATalkTransitionEvent                = ATalkTransitionEventUPP;
  230.     ATQEntry = RECORD
  231.         qLink:                    ATQEntryPtr;                            { next queue entry }
  232.         qType:                    INTEGER;                                { queue type }
  233.         CallAddr:                ATalkTransitionEventUPP;                { your routine descriptor }
  234.     END;
  235.  
  236.     Real definition of EntityName is 3 PACKED strings of any length (32 is just an example). No
  237.     offests for Asm since each String address must be calculated by adding length byte to last string ptr.
  238.     In Pascal, String(32) will be 34 bytes long since fields never start on an odd byte unless they are 
  239.     only a byte long. So this will generate correct looking interfaces for Pascal and C, but they will not
  240.     be the same, which is OK since they are not used. 
  241. }
  242.     EntityNamePtr = ^EntityName;
  243.     EntityName = RECORD
  244.         objStr:                    Str32Field;
  245.         typeStr:                Str32Field;
  246.         zoneStr:                Str32Field;
  247.     END;
  248.  
  249.     EntityPtr                            = ^EntityName;
  250.     AddrBlockPtr = ^AddrBlock;
  251.     AddrBlock = PACKED RECORD
  252.         aNet:                    UInt16;
  253.         aNode:                    UInt8;
  254.         aSocket:                UInt8;
  255.     END;
  256.  
  257.     RetransTypePtr = ^RetransType;
  258.     RetransType = PACKED RECORD
  259.         retransInterval:        UInt8;
  260.         retransCount:            UInt8;
  261.     END;
  262.  
  263.     BDSElementPtr = ^BDSElement;
  264.     BDSElement = RECORD
  265.         buffSize:                INTEGER;
  266.         buffPtr:                Ptr;
  267.         dataSize:                INTEGER;
  268.         userBytes:                LONGINT;
  269.     END;
  270.  
  271.     BDSType                                = ARRAY [0..7] OF BDSElement;
  272.     BDSPtr                                = ^BDSElement;
  273.     BitMapType = PACKED ARRAY [0..7] OF BOOLEAN;
  274.     ATLAPRecPtr = ^ATLAPRec;
  275.     ATLAPRec = RECORD
  276.         abOpcode:                ABCallType;
  277.         filler:                    SInt8;                                    {     Filler for proper byte alignment }
  278.         abResult:                INTEGER;
  279.         abUserReference:        LONGINT;
  280.         lapAddress:                LAPAdrBlock;
  281.         lapReqCount:            INTEGER;
  282.         lapActCount:            INTEGER;
  283.         lapDataPtr:                Ptr;
  284.     END;
  285.  
  286.     ATLAPRecHandle                        = ^ATLAPRecPtr;
  287.     ATDDPRecPtr = ^ATDDPRec;
  288.     ATDDPRec = RECORD
  289.         abOpcode:                ABCallType;
  290.         filler:                    SInt8;                                    {     Filler for proper byte alignment }
  291.         abResult:                INTEGER;
  292.         abUserReference:        LONGINT;
  293.         ddpType:                INTEGER;
  294.         ddpSocket:                INTEGER;
  295.         ddpAddress:                AddrBlock;
  296.         ddpReqCount:            INTEGER;
  297.         ddpActCount:            INTEGER;
  298.         ddpDataPtr:                Ptr;
  299.         ddpNodeID:                INTEGER;
  300.     END;
  301.  
  302.     ATDDPRecHandle                        = ^ATDDPRecPtr;
  303.     ATNBPRecPtr = ^ATNBPRec;
  304.     ATNBPRec = RECORD
  305.         abOpcode:                ABCallType;
  306.         filler:                    SInt8;                                    {     Filler for proper byte alignment }
  307.         abResult:                INTEGER;
  308.         abUserReference:        LONGINT;
  309.         nbpEntityPtr:            EntityPtr;
  310.         nbpBufPtr:                Ptr;
  311.         nbpBufSize:                INTEGER;
  312.         nbpDataField:            INTEGER;
  313.         nbpAddress:                AddrBlock;
  314.         nbpRetransmitInfo:        RetransType;
  315.     END;
  316.  
  317.     ATNBPRecHandle                        = ^ATNBPRecPtr;
  318.     ATATPRecPtr = ^ATATPRec;
  319.     ATATPRec = RECORD
  320.         abOpcode:                ABCallType;
  321.         filler1:                SInt8;                                    {     Filler for proper byte alignment }
  322.         abResult:                INTEGER;
  323.         abUserReference:        LONGINT;
  324.         atpSocket:                INTEGER;
  325.         atpAddress:                AddrBlock;
  326.         atpReqCount:            INTEGER;
  327.         atpDataPtr:                Ptr;
  328.         atpRspBDSPtr:            BDSPtr;
  329.         atpBitMap:                SInt8;
  330.         filler2:                SInt8;                                    {     Filler for proper byte alignment }
  331.         atpTransID:                INTEGER;
  332.         atpActCount:            INTEGER;
  333.         atpUserData:            LONGINT;
  334.         atpXO:                    BOOLEAN;
  335.         atpEOM:                    BOOLEAN;
  336.         atpTimeOut:                INTEGER;
  337.         atpRetries:                INTEGER;
  338.         atpNumBufs:                INTEGER;
  339.         atpNumRsp:                INTEGER;
  340.         atpBDSSize:                INTEGER;
  341.         atpRspUData:            LONGINT;
  342.         atpRspBuf:                Ptr;
  343.         atpRspSize:                INTEGER;
  344.     END;
  345.  
  346.     ATATPRecHandle                        = ^ATATPRecPtr;
  347.     AFPCommandBlockPtr = ^AFPCommandBlock;
  348.     AFPCommandBlock = PACKED RECORD
  349.         cmdByte:                UInt8;
  350.         startEndFlag:            UInt8;
  351.         forkRefNum:                INTEGER;
  352.         rwOffset:                LONGINT;
  353.         reqCount:                LONGINT;
  354.         newLineFlag:            UInt8;
  355.         newLineChar:            CHAR;
  356.     END;
  357.  
  358.     MPPPBPtr                            = ^MPPParamBlock;
  359.     ATPPBPtr                            = ^ATPParamBlock;
  360.     XPPParmBlkPtr                        = ^XPPParamBlock;
  361. {$IFC TYPED_FUNCTION_POINTERS}
  362.     MPPCompletionProcPtr = PROCEDURE(thePBptr: MPPPBPtr);
  363. {$ELSEC}
  364.     MPPCompletionProcPtr = Register68kProcPtr;
  365. {$ENDC}
  366.  
  367. {$IFC TYPED_FUNCTION_POINTERS}
  368.     ATPCompletionProcPtr = PROCEDURE(thePBptr: ATPPBPtr);
  369. {$ELSEC}
  370.     ATPCompletionProcPtr = Register68kProcPtr;
  371. {$ENDC}
  372.  
  373. {$IFC TYPED_FUNCTION_POINTERS}
  374.     XPPCompletionProcPtr = PROCEDURE(thePBptr: XPPParmBlkPtr);
  375. {$ELSEC}
  376.     XPPCompletionProcPtr = Register68kProcPtr;
  377. {$ENDC}
  378.  
  379. {$IFC TYPED_FUNCTION_POINTERS}
  380.     AttnRoutineProcPtr = PROCEDURE(sessRefnum: INTEGER; attnBytes: INTEGER);
  381. {$ELSEC}
  382.     AttnRoutineProcPtr = Register68kProcPtr;
  383. {$ENDC}
  384.  
  385.     MPPCompletionUPP = UniversalProcPtr;
  386.     ATPCompletionUPP = UniversalProcPtr;
  387.     XPPCompletionUPP = UniversalProcPtr;
  388.     AttnRoutineUPP = UniversalProcPtr;
  389.  
  390.     WDSElementPtr = ^WDSElement;
  391.     WDSElement = RECORD
  392.         entryLength:            INTEGER;
  393.         entryPtr:                Ptr;
  394.     END;
  395.  
  396.     NTElementPtr = ^NTElement;
  397.     NTElement = RECORD
  398.         nteAddress:                AddrBlock;                                { network address of entity }
  399.         filler:                    SInt8;
  400.         entityData:                ARRAY [0..98] OF SInt8;                    { Object, Type & Zone }
  401.     END;
  402.  
  403.     NamesTableEntryPtr = ^NamesTableEntry;
  404.     NamesTableEntry = RECORD
  405.         qNext:                    Ptr;                                    { ptr to next NTE }
  406.         nt:                        NTElement;
  407.     END;
  408.  
  409. {$IFC TYPED_FUNCTION_POINTERS}
  410.     MPPProtocolHandlerProcPtr = FUNCTION(SCCAddr1: Ptr; SCCAddr2: Ptr; MPPLocalVars: Ptr; nextFreeByteInRHA: Ptr; ReadPacketAndReadRestPtr: Ptr; numBytesLeftToReadInPacket: INTEGER): BOOLEAN;
  411. {$ELSEC}
  412.     MPPProtocolHandlerProcPtr = Register68kProcPtr;
  413. {$ENDC}
  414.  
  415. {$IFC TYPED_FUNCTION_POINTERS}
  416.     DDPSocketListenerProcPtr = FUNCTION(SCCAddr1: Ptr; SCCAddr2: Ptr; MPPLocalVars: Ptr; nextFreeByteInRHA: Ptr; ReadPacketAndReadRestPtr: Ptr; packetDestinationNumber: ByteParameter; numBytesLeftToReadInPacket: INTEGER): BOOLEAN;
  417. {$ELSEC}
  418.     DDPSocketListenerProcPtr = Register68kProcPtr;
  419. {$ENDC}
  420.  
  421.     MPPProtocolHandlerUPP = UniversalProcPtr;
  422.     DDPSocketListenerUPP = UniversalProcPtr;
  423. {
  424.     MPPProtocolHandlerProcs and  DDPSocketListenerProcs cannot be written 
  425.     in or called from a high-level language without the help of mixed mode 
  426.     or assembly glue because they use the following parameter-passing conventions:
  427.  
  428.     typedef Boolean (*MPPProtocolHandlerProcPtr)(Ptr SCCAddr1, Ptr SCCAddr2, 
  429.             Ptr MPPLocalVars, Ptr nextFreeByteInRHA, Ptr ReadPacketAndReadRestPtr, 
  430.             short numBytesLeftToReadInPacket);
  431.  
  432.         In:
  433.             =>    SCCAddr1                    A0.L
  434.             =>    SCCAddr2                    A1.L
  435.             =>    MPPLocalVars                A2.L
  436.             =>    nextFreeByteInRHA            A3.L
  437.             =>    ReadPacketAndReadRestPtr    A4.L
  438.             =>    numBytesLeftToReadInPacket    D1.W
  439.         Out:
  440.             <=    Boolean                        Z bit of CCR
  441.  
  442.     typedef Boolean (*DDPSocketListenerProcPtr)(Ptr SCCAddr1, Ptr SCCAddr2, 
  443.             Ptr MPPLocalVars, Ptr nextFreeByteInRHA, Ptr ReadPacketAndReadRestPtr, 
  444.             UInt8 packetDestinationNumber, short numBytesLeftToReadInPacket);
  445.  
  446.         In:
  447.             =>    SCCAddr1                    A0.L
  448.             =>    SCCAddr2                    A1.L
  449.             =>    MPPLocalVars                A2.L
  450.             =>    nextFreeByteInRHA            A3.L
  451.             =>    ReadPacketAndReadRestPtr    A4.L
  452.             =>    packetDestinationNumber        D0.B
  453.             =>    numBytesLeftToReadInPacket    D1.W
  454.         Out:
  455.             <=    Boolean                        Z bit of CCR
  456.  
  457. }
  458.     MPPParamBlockPtr = ^MPPParamBlock;
  459.     MPPParamBlock = PACKED RECORD
  460.         qLink:                    QElemPtr;                                { next queue entry }
  461.         qType:                    INTEGER;                                { queue type }
  462.         ioTrap:                    INTEGER;                                { routine trap }
  463.         ioCmdAddr:                Ptr;                                    { routine address }
  464.         ioCompletion:            ATPCompletionUPP;                        { ATPCompletionUPP or MPPCompletionUPP }
  465.         ioResult:                OSErr;                                    { result code }
  466.         userData:                LONGINT;                                { Command result (ATP user bytes) }
  467.         reqTID:                    INTEGER;                                { request transaction ID }
  468.         ioRefNum:                INTEGER;                                { driver reference number }
  469.         csCode:                    INTEGER;                                { Call command code }
  470.         CASE INTEGER OF
  471.         0: (
  472.             filler0:            INTEGER;
  473.             wdsPointer:            Ptr;
  474.            );
  475.         1: (
  476.             protType:            UInt8;
  477.             filler:                SInt8;
  478.             handler:            MPPProtocolHandlerUPP;
  479.            );
  480.         2: (
  481.             socket:                UInt8;
  482.             checksumFlag:        UInt8;
  483.             listener:            DDPSocketListenerUPP;
  484.            );
  485.         3: (
  486.             interval:            UInt8;                                    { retry interval  }
  487.             count:                UInt8;                                    { retry count  }
  488.             nbpPtrs:            Ptr;
  489.             CASE INTEGER OF
  490.             0: (
  491.                 verifyFlag:        UInt8;
  492.                 filler3:        UInt8;
  493.                );
  494.             1: (
  495.                 retBuffPtr:        Ptr;
  496.                 retBuffSize:    INTEGER;
  497.                 maxToGet:        INTEGER;
  498.                 numGotten:        INTEGER;
  499.                );
  500.             2: (
  501.                 confirmAddr:    AddrBlock;
  502.                 newSocket:        UInt8;
  503.                 filler4:        UInt8;
  504.                );
  505.                );
  506.             4: (
  507.                 newSelfFlag:    UInt8;                                    { self-send toggle flag  }
  508.                 oldSelfFlag:    UInt8;                                    { previous self-send state  }
  509.                );
  510.             5: (
  511.                 nKillQEl:        Ptr;                                    { ptr to i/o queue element to cancel  }
  512.                );
  513.             6: (
  514.                 version:        INTEGER;                                { requested info version }
  515.                 varsPtr:        Ptr;                                    { pointer to well known MPP vars }
  516.                 DCEPtr:            Ptr;                                    { pointer to MPP DCE }
  517.                 portID:            INTEGER;                                { port number [0..7] }
  518.                 configuration:    LONGINT;                                { 32-bit configuration word }
  519.                 selfSend:        INTEGER;                                { non zero if SelfSend enabled }
  520.                 netLo:            INTEGER;                                { low value of network range }
  521.                 netHi:            INTEGER;                                { high value of network range }
  522.                 ourAdd:            LONGINT;                                { our 24-bit AppleTalk address }
  523.                 routerAddr:        LONGINT;                                { 24-bit address of (last) router }
  524.                 numOfPHs:        INTEGER;                                { max. number of protocol handlers }
  525.                 numOfSkts:        INTEGER;                                { max. number of static sockets }
  526.                 numNBPEs:        INTEGER;                                { max. concurrent NBP requests }
  527.                 nTQueue:        Ptr;                                    { pointer to registered name queue }
  528.                 LAlength:        INTEGER;                                { length in bytes of data link addr }
  529.                 linkAddr:        Ptr;                                    { data link address returned }
  530.                 zoneName:        Ptr;                                    { zone name returned }
  531.                );
  532.             7: (
  533.                 appName:        Ptr;                                    { pointer to application name in buffer }
  534.                );
  535.     END;
  536.  
  537.  
  538.     XPPParamBlockPtr = ^XPPParamBlock;
  539.     XPPParamBlock = PACKED RECORD
  540.         qLink:                    QElemPtr;
  541.         qType:                    INTEGER;
  542.         ioTrap:                    INTEGER;
  543.         ioCmdAddr:                Ptr;
  544.         ioCompletion:            XPPCompletionUPP;
  545.         ioResult:                OSErr;
  546.         cmdResult:                LONGINT;
  547.         ioVRefNum:                INTEGER;
  548.         ioRefNum:                INTEGER;
  549.         csCode:                    INTEGER;
  550.         CASE INTEGER OF
  551.         0: (
  552.             abortSCBPtr:        Ptr;                                    {  SCB pointer for AbortOS }
  553.            );
  554.         1: (
  555.             aspMaxCmdSize:        INTEGER;                                { For SPGetParms }
  556.             aspQuantumSize:        INTEGER;
  557.             numSesss:            INTEGER;
  558.            );
  559.         2: (
  560.             sessRefnum:            INTEGER;                                { Offset to session refnum  }
  561.             aspTimeout:            UInt8;                                    { Timeout for ATP  }
  562.             aspRetry:            UInt8;                                    { Retry count for ATP  }
  563.             CASE INTEGER OF
  564.             0: (
  565.                 serverAddr:        AddrBlock;                                { Server address block  }
  566.                 scbPointer:        Ptr;                                    { SCB pointer  }
  567.                 attnRoutine:    AttnRoutineUPP;                            { Attention routine pointer }
  568.                );
  569.             1: (
  570.                 cbSize:            INTEGER;                                { Command block size  }
  571.                 cbPtr:            Ptr;                                    { Command block pointer  }
  572.                 rbSize:            INTEGER;                                { Reply buffer size  }
  573.                 rbPtr:            Ptr;                                    { Reply buffer pointer  }
  574.                 CASE INTEGER OF
  575.                 0: (
  576.                     afpAddrBlock: AddrBlock;                            { block in AFP login  }
  577.                     afpSCBPtr:    Ptr;                                    { SCB pointer in AFP login  }
  578.                     afpAttnRoutine: AttnRoutineUPP;                        { routine pointer in AFP login  }
  579.                    );
  580.                 1: (
  581.                     wdSize:        INTEGER;                                { Write Data size }
  582.                     wdPtr:        Ptr;                                    { Write Data pointer }
  583.                     ccbStart:    PACKED ARRAY [0..295] OF UInt8;            { CCB memory allocated for driver afpWrite max size(CCB)=296 all other calls=150 }
  584.                    );
  585.                    );
  586.                    );
  587.                 3: (
  588.                     xppSubCode:    INTEGER;
  589.                     xppTimeout:    UInt8;                                    { retry interval (seconds) }
  590.                     xppRetry:    UInt8;                                    { retry count }
  591.                     filler1:    INTEGER;
  592.                     zipBuffPtr:    Ptr;                                    { pointer to buffer (must be 578 bytes) }
  593.                     zipNumZones: INTEGER;                                { no. of zone names in this response }
  594.                     zipLastFlag: UInt8;                                    { non-zero if no more zones }
  595.                     filler2:    UInt8;                                    { filler }
  596.                     zipInfoField: PACKED ARRAY [1..70] OF UInt8;        { on initial call, set first word to zero }
  597.                    );
  598.     END;
  599.  
  600.     ATPParamBlockPtr = ^ATPParamBlock;
  601.     ATPParamBlock = PACKED RECORD
  602.         qLink:                    QElemPtr;                                { next queue entry }
  603.         qType:                    INTEGER;                                { queue type }
  604.         ioTrap:                    INTEGER;                                { routine trap }
  605.         ioCmdAddr:                Ptr;                                    { routine address }
  606.         ioCompletion:            ATPCompletionUPP;                        { ATPCompletionUPP or MPPCompletionUPP }
  607.         ioResult:                OSErr;                                    { result code }
  608.         userData:                LONGINT;                                { Command result (ATP user bytes) }
  609.         reqTID:                    INTEGER;                                { request transaction ID }
  610.         ioRefNum:                INTEGER;                                { driver reference number }
  611.         csCode:                    INTEGER;                                { Call command code }
  612.         atpSocket:                UInt8;                                    { currbitmap for requests or ATP socket number }
  613.         atpFlags:                UInt8;                                    { control information }
  614.         addrBlock:                AddrBlock;                                { source/dest. socket address }
  615.         reqLength:                INTEGER;                                { request/response length }
  616.         reqPointer:                Ptr;                                    { ->request/response Data }
  617.         bdsPointer:                Ptr;                                    { ->response BDS  }
  618.         CASE INTEGER OF
  619.         0: (
  620.             numOfBuffs:            UInt8;                                    { numOfBuffs  }
  621.             timeOutVal:            UInt8;                                    { timeout interval  }
  622.             numOfResps:            UInt8;                                    { number of responses actually received  }
  623.             retryCount:            UInt8;                                    { number of retries  }
  624.             intBuff:            INTEGER;                                { used internally for NSendRequest  }
  625.             TRelTime:            UInt8;                                    { TRelease time for extended send request  }
  626.             filler0:            SInt8;
  627.            );
  628.         1: (
  629.             filler:                UInt8;
  630.             bdsSize:            UInt8;                                    { number of BDS elements  }
  631.             transID:            INTEGER;                                { transaction ID recd.  }
  632.            );
  633.         2: (
  634.             bitMap:                UInt8;
  635.             filler2:            UInt8;
  636.            );
  637.         3: (
  638.             rspNum:                UInt8;
  639.             filler3:            UInt8;
  640.            );
  641.         4: (
  642.             aKillQEl:            Ptr;                                    { ptr to i/o queue element to cancel }
  643.            );
  644.     END;
  645.  
  646.  
  647. CONST
  648.     uppATalkTransitionEventProcInfo = $00000FF1;
  649.     uppMPPCompletionProcInfo = $00009802;
  650.     uppATPCompletionProcInfo = $00009802;
  651.     uppXPPCompletionProcInfo = $00009802;
  652.     uppAttnRoutineProcInfo = $00061002;
  653.     uppMPPProtocolHandlerProcInfo = $0000007F;
  654.     uppDDPSocketListenerProcInfo = $0000008F;
  655.  
  656. FUNCTION NewATalkTransitionEventProc(userRoutine: ATalkTransitionEventProcPtr): ATalkTransitionEventUPP;
  657.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  658.     INLINE $2E9F;
  659.     {$ENDC}
  660.  
  661. FUNCTION NewMPPCompletionProc(userRoutine: MPPCompletionProcPtr): MPPCompletionUPP;
  662.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  663.     INLINE $2E9F;
  664.     {$ENDC}
  665.  
  666. FUNCTION NewATPCompletionProc(userRoutine: ATPCompletionProcPtr): ATPCompletionUPP;
  667.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  668.     INLINE $2E9F;
  669.     {$ENDC}
  670.  
  671. FUNCTION NewXPPCompletionProc(userRoutine: XPPCompletionProcPtr): XPPCompletionUPP;
  672.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  673.     INLINE $2E9F;
  674.     {$ENDC}
  675.  
  676. FUNCTION NewAttnRoutineProc(userRoutine: AttnRoutineProcPtr): AttnRoutineUPP;
  677.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  678.     INLINE $2E9F;
  679.     {$ENDC}
  680.  
  681. FUNCTION NewMPPProtocolHandlerProc(userRoutine: MPPProtocolHandlerProcPtr): MPPProtocolHandlerUPP;
  682.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  683.     INLINE $2E9F;
  684.     {$ENDC}
  685.  
  686. FUNCTION NewDDPSocketListenerProc(userRoutine: DDPSocketListenerProcPtr): DDPSocketListenerUPP;
  687.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  688.     INLINE $2E9F;
  689.     {$ENDC}
  690.  
  691. FUNCTION CallATalkTransitionEventProc(eventCode: LONGINT; qElem: ATQEntryPtr; eventParameter: UNIV Ptr; userRoutine: ATalkTransitionEventUPP): LONGINT;
  692.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  693.     {To be implemented:  Glue to move parameters into registers.}
  694.     {$ENDC}
  695.  
  696. PROCEDURE CallMPPCompletionProc(thePBptr: MPPPBPtr; userRoutine: MPPCompletionUPP);
  697.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  698.     {To be implemented:  Glue to move parameters into registers.}
  699.     {$ENDC}
  700.  
  701. PROCEDURE CallATPCompletionProc(thePBptr: ATPPBPtr; userRoutine: ATPCompletionUPP);
  702.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  703.     {To be implemented:  Glue to move parameters into registers.}
  704.     {$ENDC}
  705.  
  706. PROCEDURE CallXPPCompletionProc(thePBptr: XPPParmBlkPtr; userRoutine: XPPCompletionUPP);
  707.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  708.     {To be implemented:  Glue to move parameters into registers.}
  709.     {$ENDC}
  710.  
  711. PROCEDURE CallAttnRoutineProc(sessRefnum: INTEGER; attnBytes: INTEGER; userRoutine: AttnRoutineUPP);
  712.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  713.     {To be implemented:  Glue to move parameters into registers.}
  714.     {$ENDC}
  715.  
  716. FUNCTION CallMPPProtocolHandlerProc(SCCAddr1: Ptr; SCCAddr2: Ptr; MPPLocalVars: Ptr; nextFreeByteInRHA: Ptr; ReadPacketAndReadRestPtr: Ptr; numBytesLeftToReadInPacket: INTEGER; userRoutine: MPPProtocolHandlerUPP): BOOLEAN;
  717.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  718.     {To be implemented:  Glue to move parameters into registers.}
  719.     {$ENDC}
  720.  
  721. FUNCTION CallDDPSocketListenerProc(SCCAddr1: Ptr; SCCAddr2: Ptr; MPPLocalVars: Ptr; nextFreeByteInRHA: Ptr; ReadPacketAndReadRestPtr: Ptr; packetDestinationNumber: ByteParameter; numBytesLeftToReadInPacket: INTEGER; userRoutine: DDPSocketListenerUPP): BOOLEAN;
  722.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  723.     {To be implemented:  Glue to move parameters into registers.}
  724.     {$ENDC}
  725. FUNCTION OpenXPP(VAR xppRefnum: INTEGER): OSErr;
  726. FUNCTION ASPOpenSession(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  727. FUNCTION ASPCloseSession(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  728. FUNCTION ASPAbortOS(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  729. FUNCTION ASPGetParms(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  730. FUNCTION ASPCloseAll(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  731. FUNCTION ASPUserWrite(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  732. FUNCTION ASPUserCommand(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  733. FUNCTION ASPGetStatus(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  734. FUNCTION AFPCommand(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  735. FUNCTION GetLocalZones(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  736. FUNCTION GetZoneList(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  737. FUNCTION GetMyZone(thePBptr: XPPParmBlkPtr; async: BOOLEAN): OSErr;
  738. FUNCTION PAttachPH(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  739. FUNCTION PDetachPH(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  740. FUNCTION PWriteLAP(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  741. FUNCTION POpenSkt(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  742. FUNCTION PCloseSkt(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  743. FUNCTION PWriteDDP(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  744. FUNCTION PRegisterName(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  745. FUNCTION PLookupName(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  746. FUNCTION PConfirmName(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  747. FUNCTION PRemoveName(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  748. FUNCTION PSetSelfSend(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  749. FUNCTION PKillNBP(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  750. FUNCTION PGetAppleTalkInfo(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  751. FUNCTION PATalkClosePrep(thePBptr: MPPPBPtr; async: BOOLEAN): OSErr;
  752. FUNCTION POpenATPSkt(thePBptr: ATPPBPtr; async: BOOLEAN): OSErr;
  753. FUNCTION PCloseATPSkt(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  754. FUNCTION PSendRequest(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  755. FUNCTION PGetRequest(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  756. FUNCTION PSendResponse(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  757. FUNCTION PAddResponse(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  758. FUNCTION PRelTCB(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  759. FUNCTION PRelRspCB(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  760. FUNCTION PNSendRequest(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  761. FUNCTION PKillSendReq(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  762. FUNCTION PKillGetReq(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  763. FUNCTION ATPKillAllGetReq(thePBPtr: ATPPBPtr; async: BOOLEAN): OSErr;
  764. PROCEDURE BuildLAPwds(wdsPtr: Ptr; dataPtr: Ptr; destHost: INTEGER; prototype: INTEGER; frameLen: INTEGER);
  765. PROCEDURE BuildDDPwds(wdsPtr: Ptr; headerPtr: Ptr; dataPtr: Ptr; netAddr: AddrBlock; ddpType: INTEGER; dataLen: INTEGER);
  766. PROCEDURE NBPSetEntity(buffer: Ptr; nbpObject: Str32; nbpType: Str32; nbpZone: Str32);
  767. PROCEDURE NBPSetNTE(ntePtr: Ptr; nbpObject: Str32; nbpType: Str32; nbpZone: Str32; socket: INTEGER);
  768. FUNCTION GetBridgeAddress: INTEGER;
  769. FUNCTION BuildBDS(buffPtr: Ptr; bdsPtr: Ptr; buffSize: INTEGER): INTEGER;
  770. FUNCTION MPPOpen: OSErr;
  771. FUNCTION LAPAddATQ(theATQEntry: ATQEntryPtr): OSErr;
  772. FUNCTION LAPRmvATQ(theATQEntry: ATQEntryPtr): OSErr;
  773. FUNCTION ATPLoad: OSErr;
  774. FUNCTION ATPUnload: OSErr;
  775. FUNCTION NBPExtract(theBuffer: Ptr; numInBuf: INTEGER; whichOne: INTEGER; VAR abEntity: EntityName; VAR address: AddrBlock): OSErr;
  776. FUNCTION GetNodeAddress(VAR myNode: INTEGER; VAR myNet: INTEGER): OSErr;
  777. FUNCTION IsMPPOpen: BOOLEAN;
  778. FUNCTION IsATPOpen: BOOLEAN;
  779. PROCEDURE ATEvent(event: LONGINT; infoPtr: Ptr);
  780. FUNCTION ATPreFlightEvent(event: LONGINT; cancel: LONGINT; infoPtr: Ptr): OSErr;
  781. {
  782.     The following routines are obsolete and will not be supported on
  783.     PowerPC. Equivalent functionality is provided by the routines
  784.     above.
  785. }
  786. {$IFC TARGET_CPU_68K }
  787. FUNCTION MPPClose: OSErr;
  788. FUNCTION LAPOpenProtocol(theLAPType: ByteParameter; protoPtr: Ptr): OSErr;
  789. FUNCTION LAPCloseProtocol(theLAPType: ByteParameter): OSErr;
  790. FUNCTION LAPWrite(abRecord: ATLAPRecHandle; async: BOOLEAN): OSErr;
  791. FUNCTION LAPRead(abRecord: ATLAPRecHandle; async: BOOLEAN): OSErr;
  792. FUNCTION LAPRdCancel(abRecord: ATLAPRecHandle): OSErr;
  793. FUNCTION DDPOpenSocket(VAR theSocket: INTEGER; sktListener: Ptr): OSErr;
  794. FUNCTION DDPCloseSocket(theSocket: INTEGER): OSErr;
  795. FUNCTION DDPRead(abRecord: ATDDPRecHandle; retCksumErrs: BOOLEAN; async: BOOLEAN): OSErr;
  796. FUNCTION DDPWrite(abRecord: ATDDPRecHandle; doChecksum: BOOLEAN; async: BOOLEAN): OSErr;
  797. FUNCTION DDPRdCancel(abRecord: ATDDPRecHandle): OSErr;
  798. FUNCTION ATPOpenSocket(addrRcvd: AddrBlock; VAR atpSocket: INTEGER): OSErr;
  799. FUNCTION ATPCloseSocket(atpSocket: INTEGER): OSErr;
  800. FUNCTION ATPSndRequest(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  801. FUNCTION ATPRequest(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  802. FUNCTION ATPReqCancel(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  803. FUNCTION ATPGetRequest(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  804. FUNCTION ATPSndRsp(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  805. FUNCTION ATPAddRsp(abRecord: ATATPRecHandle): OSErr;
  806. FUNCTION ATPResponse(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  807. FUNCTION ATPRspCancel(abRecord: ATATPRecHandle; async: BOOLEAN): OSErr;
  808. FUNCTION NBPRegister(abRecord: ATNBPRecHandle; async: BOOLEAN): OSErr;
  809. FUNCTION NBPLookup(abRecord: ATNBPRecHandle; async: BOOLEAN): OSErr;
  810. FUNCTION NBPConfirm(abRecord: ATNBPRecHandle; async: BOOLEAN): OSErr;
  811. FUNCTION NBPRemove(abEntity: EntityPtr): OSErr;
  812. FUNCTION NBPLoad: OSErr;
  813. FUNCTION NBPUnload: OSErr;
  814. {$ENDC}  {TARGET_CPU_68K}
  815.  
  816. {$ALIGN RESET}
  817. {$POP}
  818.  
  819. {$SETC UsingIncludes := AppleTalkIncludes}
  820.  
  821. {$ENDC} {__APPLETALK__}
  822.  
  823. {$IFC NOT UsingIncludes}
  824.  END.
  825. {$ENDC}
  826.